/*!  \file  main.cpp
 *	  \brief  
 * 
 *   \details   details
 *   \author    Yordan Madzhunkov German Research School for Simulation Sciences GmbH
 *   \version   1.0
 *   \date      04/18/2013 12:42:39 PM
 *   \copyright GNU Public License.
 */

using namespace std;
#include	<cstdlib>
#include <iostream>
#include <math.h>
#include "UnitTester.h"
#include "Timer.h"
#include "ImplementationFactory.h"
#include "Matrix.h"
#include "RandomGenerator.h"
#include "MatrixGenerator.h"
#include "FullSVD.h"
#include "ThreadPool.h"
#include "Lock.h"
#include "setThreads.h"
extern "C" {
	void ilaver_(int *, int*, int*);
}
int main ( int argc, char *argv[] )
{
	UnitTester * tester = UnitTester::instance(argc, argv); // provide the tester with nessery info
	int major, minor, patch; 
	ilaver_(&major, &minor, &patch);
	int cores = ThreadPool::getOnlineCores();
	cout << "Online cores   = " << cores << endl;
	cout << "Lapack version   " << major << "." << minor << "." << patch << endl;
	tester->runRecomiledTests(); // run all small test cases 
	ImplementationFactory::instance()->printAllRegistered();
#ifdef NDEBUG
	tester->runBenchmarks();//report differnt type of metrics
#endif
//   ImplementationFactory::instance()->printGroupPlotFiles();
	return 0;
}
